/**
 * Created by Administrator on 13-12-31.
 */
package main

import (
	"fmt"
	"net/rpc"
	"os"
)

type Args struct {
	I, J int
}

type MyMethod int

//func (this *MyMethod) Mult(args *Args, reply *int) error {
//  if args == nil || reply == nil {
//      return errors.New("nil paramters !")
//  }
//  *reply = args.I*args.J
//  return nil
//}

type DivResult struct {
	Quo, Rem int
}

//func (this *MyMethod) Div(args *Args, reply *DivResult) {
//  reply.Quo = args.I / args.J
//  reply.Rem = args.J % args.J
//}

func main() {
	pClient, err := rpc.Dial("tcp", "127.0.0.1:7777")
	if err != nil {
		fmt.Fprintf(os.Stderr, "err : %s\n", err.Error())
		return
	}
	// <span style="white-space:pre">  defer pClient.Close()</span>

	// 同步RPC
	var multResult int
	err = pClient.Call("MyMethod.Mult", &Args{2, 7}, &multResult)
	if err != nil {
		fmt.Fprintf(os.Stderr, "err : %s\n", err.Error())
		return
	}
	fmt.Fprintf(os.Stdout, "multResult = %d\n", multResult)

	// 异步RPC
	// var divResult DivResult
	// pCall := pClient.Go("MyMethod.Div", &Args{5, 2}, &divResult, nil)
	// if pCall != nil {
	// 	fmt.Fprintf(os.Stderr, "pCall : %v  %v\n", pCall, pCall.Reply)
	// 	if replyCall, ok := <-pCall.Done; ok {
	// 		fmt.Fprintf(os.Stderr, "replyCall : %v  %v\n", replyCall, replyCall.Reply)
	// 	}

	// }

}
